﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Factorias;
using Persistencia.Interfaces;

namespace GestorDeFlotasModelo.Entities
{
    public partial class Viaje : IPersistibleModelo, IIdentityEntity
    {
        PersistibleDB persistible;

        #region Miembros de IPersistibleModelo

        void IPersistibleModelo.CargarParametrosClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Viaje_Id", this.Id);
        }

        void IPersistibleModelo.CargarParametrosNoClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Viaje_Chofer", this.Chofer.Id);
            parameters.Add("Viaje_Auto", this.Auto.Id);
            parameters.Add("Viaje_Turno", this.Turno.Id);

            if(this.Cliente != null)
                parameters.Add("Viaje_Cliente", this.Cliente.Id);
            else
                parameters.Add("Viaje_Cliente", null);

            parameters.Add("Viaje_Reloj", this.Reloj.Id);
            parameters.Add("Viaje_Fecha", this.Fecha);
            parameters.Add("Viaje_Cant_Fichas", this.CantFichas);
            parameters.Add("Viaje_Consistente", this.Consistente);

            if(this.Rendicion != null)
                parameters.Add("Viaje_Rendicion", this.Rendicion.Id);
            else
                parameters.Add("Viaje_Rendicion", null);

            if (this.Factura != null)
                parameters.Add("Viaje_Factura", this.Factura.Id);
            else
                parameters.Add("Viaje_Factura", null);
        }

        void IPersistibleModelo.Cargar(HashTableNCSensitive hts)
        {
            this.Id = int.Parse(hts["Viaje_Id"].ToString());
            this.Fecha = DateTime.Parse(hts["Viaje_Fecha"].ToString());
            this.CantFichas = int.Parse(hts["Viaje_Cant_Fichas"].ToString());
            this.Chofer = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaChofer>().SelectXId<Chofer>(hts["Viaje_Chofer"].ToString());
            this.Auto = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaAuto>().SelectXId<Auto>(hts["Viaje_Auto"].ToString());
            this.Turno = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaTurno>().SelectXId<Turno>(hts["Viaje_Turno"].ToString());
            this.Reloj = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaReloj>().SelectXId<Reloj>(hts["Viaje_Reloj"].ToString());

            this.Consistente = bool.Parse(hts["Viaje_Consistente"].ToString());
            if (hts["Viaje_Cliente"] != null && hts["Viaje_Cliente"].ToString() != "")
                this.Cliente = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaCliente>().SelectXId<Cliente>(hts["Viaje_Cliente"].ToString());

            if (hts["Viaje_Rendicion"] != null && hts["Viaje_Rendicion"].ToString() != "")
                this.Rendicion = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaRendicion>().SelectXId<Rendicion>(hts["Viaje_Rendicion"].ToString());

            if (hts["Viaje_Factura"] != null && hts["Viaje_Factura"].ToString() != "")
                this.Factura = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaFactura>().SelectXId<Factura>(hts["Viaje_Factura"].ToString());

        }

        void IPersistibleModelo.AntesInsert() { }

        void IPersistibleModelo.AntesUpdate() { }

        void IPersistibleModelo.AntesDelete() { }

        void IPersistibleModelo.DespuesInsert() { }

        void IPersistibleModelo.DespuesUpdate() { }

        void IPersistibleModelo.DespuesDelete() { }

        string IPersistibleModelo.HashDatos
        {
            get 
            {
                return 
                this.Id.ToString() + 
                this.CantFichas + 
                this.Chofer.Id +
                (Object.Equals(this.Cliente,null)?"":this.Cliente.Id.ToString()) +
                (Object.Equals(this.Rendicion, null) ? "" : this.Rendicion.Id.ToString()) +
                (Object.Equals(this.Factura, null) ? "" : this.Factura.Id.ToString()) +
                this.Auto.Id + 
                this.Turno.Id + 
                this.Reloj.Id +
                this.Fecha.ToShortDateString()+
                this.Consistente;
            }
        }

        PersistibleDB IPersistibleModelo.Persistible
        {
            get
            {
                return this.persistible;
            }
            set
            {
                this.persistible = value;
            }
        }

        #endregion
        #region Miembros de IIdentityFactory

        long IIdentityEntity.Id
        {
            get
            {
                return this.Id;
            }
            set
            {
                this.Id = value;
            }
        }

        #endregion
        #region Miembros de IPersistible

        void IPersistible.Insert()
        {
            this.persistible.Insert();
        }

        void IPersistible.Update()
        {
            this.persistible.Update();
        }

        void IPersistible.Delete()
        {
            this.persistible.Delete();
        }

        #endregion
    }
}
